﻿/**
 * \file MonteurPartie.cs
 * \brief Classe MonteurPartie
 * \author ARTUR Vincent
 * \author LAPERDRIX Pierre
 * \version 1.0
 */
namespace Implem
{
	using Interfaces;
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
    using System.Windows.Media;
    using Wrapper;

    /**
     * \class MonteurPartie
     * \brief Objet representant le monteur de la partie
     */
	public class MonteurPartie : IMonteurPartie
	{

        /**
         * \fn public unsafe Partie creerPartie(typeStrategie s, int nbJoueur, List<string> n, List<typeCivil> civi, List<Color> coul)
         * \brief Cree la partie
         * \param s le type de strategie (petite, moyenne ou grande carte)
         * \param nbJoueur le nombre de joueurs
         * \param n la liste des noms des differents joueurs
         * \param civi la liste des civilisations des differents joueurs
         * \param coul la liste des couleurs des differents joueurs
         * \return la partie
         */
        public unsafe Partie creerPartie(typeStrategie s, int nbJoueur, List<string> n, List<typeCivil> civi, List<Color> coul)
        {
            
            StrategieCarte strat;
            switch (s)
            {
                case typeStrategie.grandeCarte:  strat = new StrategieGrandeCarte(); break;
                case typeStrategie.moyenneCarte: strat = new StrategieMoyenneCarte(); break;
                case typeStrategie.petiteCarte:  strat = new StrategiePetiteCarte(); break;
                default: strat = new StrategiePetiteCarte(); break;
            }

            Carte carte = new Carte(strat);

            Joueur[] joueurs = new Joueur[nbJoueur];

            //PENSEZ A FAIRE DES DELETE (dilette, la perfection au masculin)
            WPlac algo = new WPlac();
            for (int i = 0; i < nbJoueur; i++)
            {
                int* tabPos = algo.placer(i, nbJoueur, strat.Taille);

                Joueur tmp = new Joueur(n.ElementAt(i), coul.ElementAt(i), civi.ElementAt(i), new Position(tabPos[0], tabPos[1]));
                joueurs[i] = tmp;
            }
 
            Partie partie = new Partie(carte,nbJoueur,joueurs);
            return partie;
        }



	}
}

